// 事件是异步的 这里模拟底层试试
// 写 订阅公众号 订阅关系
// 
let eventEmitter = {
    list: {//订阅者数据
        'article': []
    },
    on(event, fn) {
        // 订阅关系,数组
        // 没有把 fn 立即执行 , 只是存住 user1,user2,触发事件再执行(emit)
        this.list[event].push(fn);
        console.log(this.list);
    },
    emit(event, title) {
        this.list[event].forEach(fn => {
            fn(title);
        })
    }
};

function user1(content) {
    console.log('用户1订阅了', content);
}
function user2(content) {
    console.log('用户2订阅了', content);
}
// 先订阅 再推送图文 异步
// on 代表订阅
eventEmitter.on('article', user1);
eventEmitter.on('article', user2);
// emit 代表发布内容(事件异步 event loop)
setTimeout(() => {
    eventEmitter.emit('article', 'JavaScript订阅-发布模式');
}, 5000)
setTimeout(() => {
    eventEmitter.emit('article', 'JavaScript订阅-发布模式2.0');
}, 10000)